package com.hsu.hsurpc.loadbalancer;

import com.hsu.hsurpc.model.ServiceMetaInfo;

import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * 随机负载均衡器
 * @Author Hsu琛君珩
 * @Date 2024-09-24 15:42
 * @Description
 * @Version: v1.0.0
 */
public class RandomLoadBalancer implements LoadBalancer {

    /**
     * 随机数生成器
     * 用于在服务节点列表中随机选择一个节点。
     */
    private final Random random = new Random();

    /**
     * 从服务节点列表中随机选择一个节点
     * 如果只有一个节点，则直接返回该节点；如果没有节点则返回 null。
     *
     * @param requestParams      请求参数，用于选择服务节点时的参考（此实现中未使用）
     * @param serviceMetaInfoList 服务节点的元数据信息列表，包含所有可用的服务节点
     * @return 返回随机选择的服务节点的元数据信息
     */
    @Override
    public ServiceMetaInfo select(Map<String, Object> requestParams, List<ServiceMetaInfo> serviceMetaInfoList) {
        int size = serviceMetaInfoList.size();
        if (size == 0) {
            return null;
        }
        if (size == 1) {
            return serviceMetaInfoList.get(0); // 如果只有一个服务节点，直接返回该节点
        }
        // 使用随机数生成器随机选择一个服务节点
        return serviceMetaInfoList.get(random.nextInt(size));
    }
}
